package com.mike.bdb.util;

import java.io.File;
import java.io.IOException;

/**
 * 文件操作工具
 * @author <a href="zhaoming23@gmail.com"> Mike </a>
 * @version 1.0
 * 2011-4-23 下午01:43:14
 */
public class Folder {

	/** 获得指定文件名的文件 如果存在就不创建*/
	public static File getFile(String fileName) {
		return getFile(fileName, false);
	}
	
	/** 获得指定文件名的文件 如果不存在就创建*/
	public static File getNewFile(String fileName) {
		return getFile(fileName, true);
	}
	
	/** 获得指定文件名的文件夹 如果存在就不创建*/
	public static File getFolder(String folderName) {
		return getFolder(folderName, false);
	}
	
	/** 获得指定文件名的文件夹 如果不存在就创建*/
	public static File getNewFolder(String folderName) {
		return getFolder(folderName, true);
	}
	
	private static File getFile(String fileName, boolean oldDel) {
		if(null == fileName || "".equals(fileName.trim())) return null;
		File file = new File(fileName);
		boolean exists = file.exists();
		if(exists) {
			if(file.isDirectory()) {
				delFolder(file);
				getFile(fileName, oldDel);
			} else {
				if(oldDel) {
					file.delete();
					getFile(fileName, oldDel);
				}
			}
		} else {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return file; 
		
	}
	
	private static File getFolder(String folderName, boolean oldDel) {
		if(null == folderName || "".equals(folderName.trim())) return null;
		File file = new File(folderName);
		boolean exists = file.exists();
		if(exists) {
			if(file.isFile()) {
				file.delete();
			} else {
				if(oldDel) {
					delFolder(file);
					getFolder(folderName, oldDel);
				}
			}
		}
		file.mkdir();
		return file;
	}
	
	
	/**
	 * 删除文件夹 <递归方法>
	 * @param sub
	 */
	private static void delFolder(File sub) {
		if(null == sub) return;
		File[] listFiles = sub.listFiles();
		if(0 == listFiles.length) sub.delete();
		for (File f : listFiles) {
			if(f.isFile()) {
				f.delete();
			} else {
				delFolder(f);
			}
		}
	}
	
	
}
